package estore.model;
import java.io.Serializable;
import java.util.Objects;

/**
 * 商品实体类（支持序列化，用于数据持久化）
 */
public class Product implements Serializable {
    // 序列化版本号：固定值确保序列化/反序列化兼容性
    private static final long serialVersionUID = 1L;

    private String id;      // 商品ID
    private String name;    // 商品名称
    private double price;   // 价格
    private int stock;      // 库存

    /**
     * 构造函数，用于创建一个新的商品对象
     * @param id 商品ID
     * @param name 商品名称
     * @param price 商品价格
     * @param stock 商品库存
     */
    public Product(String id, String name, double price, int stock) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.stock = stock;
    }

    // Getters and Setters（保持不变）
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public double getPrice() { return price; }
    public void setPrice(double price) { this.price = price; }
    public int getStock() { return stock; }
    public void setStock(int stock) { this.stock = stock; }

    /**
     * 重写toString方法，用于格式化输出商品信息
     * @return 格式化的商品信息字符串
     */
    @Override
    public String toString() {
        return String.format("ID: %-5s | 名称: %-20s | 价格: ¥%-8.2f | 库存: %d", id, name, price, stock);
    }

    /**
     * 重写equals方法，基于商品ID判断对象相等
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return Objects.equals(id, product.id);
    }

    /**
     * 重写hashCode方法，基于商品ID生成哈希码
     */
    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}